//
//  Person.h
//  OC08_iOS9新特性(Nullability, 泛型, _kindof)
//
//  Created by Hanlingyu on 16/7/13.
//  Copyright © 2016年 ltq. All rights reserved.
//

#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN

@interface Person : NSObject
// Nullability(判断为不为空的能力, 只能用在对象类型上) 是在编译层次上加了一些活动
// nonnull 声明的属性, 不能为空 (getter和setter方法)

// 两种写法:
// @property (nonnull, nonatomic, copy) NSString *name;
// __nonnull 在声明属性的类型后加__nonnull
@property (nonatomic, copy) NSString * __nonnull name;

// nullable 声明的属性, 可以为空 (getter和setter方法)
//@property (nullable, nonatomic, copy) NSString *sex;

// __nullable 在声明属性的类型后加__nullable
@property (nonatomic, copy) NSString *__nullable sex;
// null_resettable, setter 方法是nullable getter方法是nonull
// 举例, UIViewController中的view属性
@property (null_resettable, nonatomic, strong) NSArray *friends;

@property (nonatomic, strong) NSDictionary *dic;

//NS_ASSUME_NONNULL_BEGIN
//NS_ASSUME_NONNULL_END
// 一般应用于头文件 .h, 一般讲声明包含起来
// 针对所有属性, 添加 nonnull 修饰
// 也就是说, 除了nullable和null_resttable需要加修饰, 其他都不需要

// 不可以像下面这样做, 会爆红
//@property (nonnull, nonatomic, assign) NSInteger number;

@end
NS_ASSUME_NONNULL_END
